package com.maxio.config.exception;

import cn.dev33.satoken.exception.*;
import com.maxio.common.enums.ErrorCode;
import com.maxio.domain.R;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GlobalExceptionHandler {

    // 未登录
    @ExceptionHandler(NotLoginException.class)
    public R<?> handlerNotLoginException(NotLoginException e) {
        return R.fail(ErrorCode.NOT_LOGIN_ERROR.getCode(), ErrorCode.NOT_LOGIN_ERROR.getMessage());
    }

    // 无方法权限
    @ExceptionHandler(NotPermissionException.class)
    public R<?> handlerNotPermissionException(NotPermissionException e) {
//        System.out.println(e.getLoginType());
        return R.fail(ErrorCode.NO_PERMISSION_AUTH_ERROR.getCode(), ErrorCode.NO_PERMISSION_AUTH_ERROR.getMessage());
    }

    // 无角色权限
    @ExceptionHandler(NotRoleException.class)
    public R<?> handlerNotRoleException(NotRoleException e) {
//        System.out.println(e.getLoginType());
        return R.fail(ErrorCode.NO_ROLE_AUTH_ERROR.getCode(), ErrorCode.NO_ROLE_AUTH_ERROR.getMessage());
    }

    // 二级认证失败
    @ExceptionHandler(NotSafeException.class)
    public R<?> handlerNotSafeException(NotSafeException e) {
        return R.fail(ErrorCode.NO_SAFE_AUTH_ERROR.getCode(), ErrorCode.NO_SAFE_AUTH_ERROR.getMessage());
    }

    // Http Basic校验失败
    @ExceptionHandler(NotHttpBasicAuthException.class)
    public R<?> handlerNotHttpBasicAuthException(NotHttpBasicAuthException e) {
        return R.fail(ErrorCode.NO_HTTP_BASIC_ERROR.getCode(), ErrorCode.NO_HTTP_BASIC_ERROR.getMessage());
    }

    // Http Digest校验失败
    @ExceptionHandler(NotHttpDigestAuthException.class)
    public R<?> handlerNotHttpDigestAuthException(NotHttpDigestAuthException e) {
        return R.fail(ErrorCode.NO_HTTP_DIGEST_ERROR.getCode(), ErrorCode.NO_HTTP_DIGEST_ERROR.getMessage());
    }

    // 全局异常拦截
    @ExceptionHandler
    public R<?> handlerException(Exception e) {
        e.printStackTrace();
        return R.fail(ErrorCode.SYSTEM_ERROR.getCode(), ErrorCode.SYSTEM_ERROR.getMessage());
    }


}

